package com.joker.demo.admin.domain.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 环境监控VO
 *
 * @author : feixiang.li
 * @since : 2025-01-27 10:30
 */
@Data
public class EnvironmentMonitorVO implements Serializable {

    /**
     * 主键ID
     */
    private Long id;

    /**
     * 执行器注册键
     */
    private String registerKey;

    /**
     * 应用名称
     */
    private String appName;

    /**
     * 监控时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime monitorTime;

    /**
     * 操作系统名称
     */
    private String osName;

    /**
     * 操作系统版本
     */
    private String osVersion;

    /**
     * 系统架构
     */
    private String osArch;

    /**
     * CPU核心数
     */
    private Integer cpuCores;

    /**
     * CPU使用率
     */
    private BigDecimal cpuUsagePercent;

    /**
     * 系统总内存(MB)
     */
    private Long totalMemoryMB;

    /**
     * 系统已用内存(MB)
     */
    private Long usedMemoryMB;

    /**
     * 系统空闲内存(MB)
     */
    private Long freeMemoryMB;

    /**
     * 系统内存使用率
     */
    private BigDecimal systemMemoryUsagePercent;

    /**
     * 系统负载平均值
     */
    private BigDecimal systemLoadAverage;

    /**
     * 系统运行时间(秒)
     */
    private Long uptimeSeconds;

    /**
     * JVM版本
     */
    private String jvmVersion;

    /**
     * JVM供应商
     */
    private String jvmVendor;

    /**
     * JVM名称
     */
    private String jvmName;

    /**
     * JVM启动时间
     */
    private Long jvmStartTime;

    /**
     * JVM运行时间(毫秒)
     */
    private Long jvmUptime;

    /**
     * 最大堆内存(MB)
     */
    private Long maxHeapMemoryMB;

    /**
     * 已用堆内存(MB)
     */
    private Long usedHeapMemoryMB;

    /**
     * 空闲堆内存(MB)
     */
    private Long freeHeapMemoryMB;

    /**
     * 堆内存使用率
     */
    private BigDecimal heapMemoryUsagePercent;

    /**
     * 最大非堆内存(MB)
     */
    private Long maxNonHeapMemoryMB;

    /**
     * 已用非堆内存(MB)
     */
    private Long usedNonHeapMemoryMB;

    /**
     * 非堆内存使用率
     */
    private BigDecimal nonHeapMemoryUsagePercent;

    /**
     * 线程总数
     */
    private Integer threadCount;

    /**
     * 守护线程数
     */
    private Integer daemonThreadCount;

    /**
     * 峰值线程数
     */
    private Integer peakThreadCount;

    /**
     * 类加载器数量
     */
    private Integer classLoaderCount;

    /**
     * 已加载类数量
     */
    private Long loadedClassCount;

    /**
     * 总加载类数量
     */
    private Long totalLoadedClassCount;

    /**
     * 已卸载类数量
     */
    private Long unloadedClassCount;

    /**
     * 磁盘信息JSON
     */
    private String diskInfosJson;

    /**
     * 网络信息JSON
     */
    private String networkInfoJson;

    /**
     * GC信息JSON
     */
    private String gcInfosJson;

    /**
     * 进程ID
     */
    private Long processId;

    /**
     * 进程名称
     */
    private String processName;

    /**
     * 进程CPU使用率
     */
    private BigDecimal processCpuUsagePercent;

    /**
     * 进程内存使用(MB)
     */
    private Long processMemoryUsageMB;

    /**
     * 进程线程数
     */
    private Integer processThreadCount;

    /**
     * 进程打开文件数
     */
    private Long openFileCount;

    /**
     * 进程优先级
     */
    private Integer processPriority;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
}
